/*	
	Universidad: Universidad Nacional de Río Cuarto (UNRC)
	Materia: Taller de Diseño de Software (Cod. 3306)
	Carrera: Licenciatura en Ciencias de la Computación
	Proyecto 2011: Compilador de un subconjunto del lenguaje C (C--).
	Integrantes:
		Bettiol, Matías Nicolas.
		Mattana, Diego Leonel.
*/

%{

#include "y.tab.h"
#include "stdio.h"

extern void reportarToken(char* pLexema);

%}

%option noyywrap
%option yylineno

NUMERO 			([0-9]+)
LETRA			([a-zA-Z])
ID				({LETRA}+)
INT				({NUMERO}+)
FLOAT			({NUMERO}"."{NUMERO}|{NUMERO}"."{NUMERO}Ee[+-]{NUMERO}|"."{NUMERO}|"."{NUMERO}Ee[+-]{NUMERO})
ENTER			("\n")
TAB 			("\t")
BLANCO			(" ")
LLAVE1 			("/*")
LLAVE2			("*/")
COMENTARIOS 	({LLAVE1}({NUMERO}|{LETRA}|(.)*|{BLANCO}|{ENTER}|{TAB})*{LLAVE2})	

%%

"int"			{yylval.variable = (char*)malloc(255 * sizeof(char)); strcpy(yylval.variable, yytext); return tipoI; reportarToken(yytext);}
"float"			{yylval.variable = (char*)malloc(255 * sizeof(char)); strcpy(yylval.variable, yytext); return tipoF; reportarToken(yytext);}
"break"			{return brek; reportarToken(yytext);}
"continue"		{return continuar; reportarToken(yytext);}
"return"		{return retornar; reportarToken(yytext);}
"if"			{return si; reportarToken(yytext);}
"else"			{return sino; reportarToken(yytext);}
"while"			{return mientras; reportarToken(yytext);}
{ID}			{yylval.variable = (char*)malloc(255 * sizeof(char)); strcpy(yylval.variable, yytext); return id; reportarToken(yytext);}
{INT}			{yylval.variable = (char*)malloc(255 * sizeof(char)); strcpy(yylval.variable, yytext); return integer; reportarToken(yytext);}
{FLOAT}			{yylval.variable = (char*)malloc(255 * sizeof(char)); strcpy(yylval.variable, yytext); return flo; reportarToken(yytext);}
{ENTER}	
{COMENTARIOS}
{TAB}
{BLANCO}
"=="			{return iguales; reportarToken(yytext);}
"="				{return asignacion; reportarToken(yytext);}
"||"			{return ologico; reportarToken(yytext);}
"&&"			{return ilogico; reportarToken(yytext);}
"<"				{return menor; reportarToken(yytext);}
">"				{return mayor; reportarToken(yytext);}
"+"				{return mas; reportarToken(yytext);}
"*"				{return mult; reportarToken(yytext);}
"/"				{return division; reportarToken(yytext);}
"%"				{return resto; reportarToken(yytext);}
"!"				{return complemento; reportarToken(yytext);}
"-"				{return negacion; reportarToken(yytext);}
"{"				{return llaveAbre; reportarToken(yytext);}
"}"				{return llaveCierra; reportarToken(yytext);}
";"				{return finSentencia; reportarToken(yytext);}
","				{return coma; reportarToken(yytext);}
"?"				{return pregunta; reportarToken(yytext);}
":"				{return dosPuntos; reportarToken(yytext);}
"("				{return aParen; reportarToken(yytext);}
")"				{return cParen; reportarToken(yytext);}
"."				{return punto; reportarToken(yytext);}

%%
